// ------------------------------------------------------------------------------------------------------------------------
// Plemiona.pl 5.X Skrypt użytkowy
//
// Nazwa:      Idealne stany wojsk
// Wersja:     1.2
// Autor:      smig1o (Forum Plemion)
// Dostosował: Lukasz032 (Authorized-Scripter)
//
// Tagi specjakne:
// Licencja:   Creative Commons Uznanie autorstwa - Brak komercyjnego zastosowania - Na tych samych warunkach 2.0 Polska
// Informacje: http://creativecommons.org/licenses/by-nc-sa/2.0/pl
// Support:    lvwnbrz@lykamspam.pl
//
// ------------------------------------------------------------------------------------------------------------------------
// ==UserScript==
// @name           Idealne stany wojsk
// @namespace      http://code.google.com/p/plemiona-skrypty/
// @description    Idealne stany wojsk
// @version        1.2
// @license        Creative Commons 2.0 BY-NC-SA (http://creativecommons.org/licenses/by-nc-sa/2.0/pl)
// @author         smig1o (Forum Plemion)
// @contributor    Lukasz032 (Authorized-Scripter)
// @include        http://pl*.plemiona.pl/game.php*
// ==/UserScript==
// ------------------------------------------------------------------------------------------------------------------------

// Funkcja inicjująca pod koniec skryptu....

// ------------------------
// - WŁAŚCIWY KOD SKRYPTU -
// ------------------------
function iww1load() {

//funkcja zwraca ID aktualnego miasta
function getCurrentCityID()
{
var arrA = document.body.getElementsByTagName("a"); //lista wszystkich tagow typu <a> </a>
for ( var i =0; i < arrA.length; i++ )
{
	var iIdx = -1, iIdx2 = -1;
	var cityName = new String(arrA[i].lastChild.wholeText);
	iIdx = cityName.search ("Mapa");
	if ( iIdx >=0 )
	{
		var tableElement = arrA[i].parentNode.parentNode.parentNode;
		var href = new String(tableElement.firstChild.cells[1].firstChild);
		var id = href.split("&")[0].split("=")[1];
		return id;
		break;
	}
}
}

//funkcja zwraca kolor odpowiedni dla podanej wartosci procentowej (0 - 100)
function GetColor(procent)
{
 if ( parseInt(procent) >= 100 )
 {
  kolor = fullColor;
	return kolor;
 }
 var krok = Math.round(255/100)-1; //o ile zmienia sie skladowa koloru na 1%
 var zmiana = krok * parseInt(procent); //calkowita zmiana dla podanej ilosci

//wartosci skladowe
//baza
 var R = 0;
 var G = 255;
 var B = 255;

//zmiana
 R = R + zmiana;
 G = G - zmiana;
 B = B - zmiana;

//zamiana wartosci na Hex
 var kolorR = R.toString(16);
 var kolorG = G.toString(16);
 var kolorB = B.toString(16);
 if ( kolorR.length == 1 )
  kolorR = "0" + kolorR;
 if ( kolorG.length == 1 )
  kolorG = "0" + kolorG;
 if ( kolorB.length == 1 )
  kolorB = "0" + kolorB;
 var kolor = "#" + kolorR + kolorG + kolorB; //ciag reprezentujacy kolor
 
 return kolor;
}//GetColor

//funkcja sprawdza, ktore jednostki sa zapamietane
function checkArmy(unitType)
{
 Typ = GM_getValue('ArmyType', 'army'); //sprawdzac liste jednostek porzadanych, czy przeznaczonych do ataku (domyslnie porzadanych)
 List = "";
 if ( Typ == 'army' )
	List = GM_getValue(cityUnitsName, ""); //lista jednostek porzadanych
 else
   List = GM_getValue(attackUnitsName, ""); //lista jednostek do ataku
 fullList = List.split(";");
 for ( var i=0; i < fullList.length; i++ )
 {
  unit = fullList[i].split("|");
	if ( unit[0] == unitType )
	{
	 return unit[1]; //znaleziono - przycisk ma pokazywac ilosc
	}	
 }
 return "Save"; //nie znaleziono - przycisk ma pokazywac napis "Save"
}//checkArmy

//funkcja zapamietuje jednostke danego typu
function saveUnit()
{
	var targ; //zrodlo eventu
	var e;
	if ( window.event && window.event.srcElement)
	{
		targ = window.event.srcelement;
	}
	else
	{
		targ = this;
	}
 unitType = targ.getAttribute('unit_type'); //typ jednostki do zapamietania
 amount = document.getElementsByName(unitType)[0].value; //ilosc
 
 //co ma byc zapamietane - jednostki porzadane, czy jednostki do ataku
 Typ = GM_getValue('ArmyType', 'army'); 
 if ( Typ == 'army' )
	List = GM_getValue(cityUnitsName, ""); //jednostki porzadane
 else
  List = GM_getValue(attackUnitsName, ""); //jednostki do ataku
 fullList = List.split(";"); //lista
 for ( var i=0; i < fullList.length; i++ )
 {
	unit = fullList[i].split("|"); //jednostka na liscie
	if ( unit[0] == unitType )
	{
	 if ( amount != "" ) //jesli wpisano liczbe
	 {
		fullList[i] = unitType + "|" + amount; //zapamietuje / nadpisuje
	 }//if
	 else
	 {
	  fullList[i] = ""; //nie podano liczby - usuwam z listy
	 }//else
	 break;
	}	//for
 }//for
 if ( i == fullList.length ) //gdy przeszukalem cala liste i nie znalazlem wpisu - dodaje nowy
 {
	fullList[fullList.length] = unitType + "|" + amount;
 }//if
 List = ""; //nowa lista
 //przetwarzam stara usuwajac ewentualne puste wpisy
 for ( var i =0; i < fullList.length; i++ )
 {
	if ( fullList[i].length > 0 )
		List += fullList[i] + ";";
 }//for
 //zapamietuje liste w odpowiedniej zmiennej
 if ( Typ == 'army' )
 {
	GM_setValue(cityUnitsName, List); 
	//zmieniam opis kontrolki tak, by wskazywal odpowiednia wartosc
	if ( amount != "" )
		targ.setAttribute('value', amount );
	else
		targ.setAttribute('value', "Save");
 } //if
 else
  GM_setValue(attackUnitsName, List);
}//saveUnit

//funkcja zapamietuje porzadane wypelnienie miasta
function SavePerfectUnits()
{
 amount = document.getElementById('Perfect_units').value;
 if ( amount == "" )
  amount = "0";
 GM_setValue('CityFill', amount);
}//SavePerfectUnits

//funkcja notuje, ktory typ danych ma zostac zapamietany
function PickUnits()
{
	var targ;
	var e;
	if ( window.event && window.event.srcElement)
	{
		targ = window.event.srcelement;
	}
	else
	{
		targ = this;
	}
 Typ = GM_getValue('ArmyType', 'army');
 typ = targ.getAttribute('value');
 GM_setValue('ArmyType', typ);
 document.location.reload(); //wymaga przeladowania strony by odswierzyc zawartosc przyciskow
}//PickUnits

//funkcja pokazuje/ukrywa przyciski zawierajace informacje o porzadanym wyposarzeniu miasta
function toggleSavedPerfect()
{
 Toggle = GM_getValue('Mode', '0');
 if ( Toggle == "0" )
  Toggle = "1";
 else
  Toggle = "0";
 GM_setValue('Mode', Toggle);
 document.location.reload(); //wymaga odswierzenia by pokazac/ukryc przyciski
}//toggleSavedPerfect

//przygotowanie do wyslania perfekcyjnej ilosci jednostek - wypelnienie formularza
function FillPerfectAttack()
{
  List = GM_getValue(attackUnitsName, "");
  fullList = List.split(";");
  arrInput = document.body.getElementsByClassName("unitsInput");
  for ( i = 0; i < arrInput.length; i++ )
  {
	 if ( arrInput[i] != null )
	 {
	  var unitType = "";
	  unitType = arrInput[i].parentNode.parentNode.firstChild.childNodes[2].getAttribute('name');
	  for ( var j=0; j < fullList.length; j++ )
	  {
		 unit = fullList[j].split("|");
		 if ( unit[0] == unitType )
		 {
		  if ( unit[1] != "" )
		  {
		   arrInput[i].parentNode.parentNode.firstChild.childNodes[2].value = unit[1];
	    }//if
		 }//if
	  }//for
	 }//if
  }//for  
}//FillPerfectAttack

//przygotowanie do wys�ania nadmiaru jednostek - wypełnienie formularza
function FillNadmiar()
{
  List = GM_getValue(attackUnitsName, "");
  fullList = List.split(";");

 arrInput = document.body.getElementsByClassName("unitsInput");
 for ( i = 0; i < arrInput.length; i++ )
 {
	unitType = arrInput[i].parentNode.parentNode.firstChild.childNodes[2].getAttribute('name');
	if ( arrInput[i].parentNode.parentNode.firstChild.childNodes[4].innerHTML != null )
	{
	 if ( arrInput[i].parentNode.parentNode.firstChild.childNodes[4].innerHTML != "(0)" )
	 {
	  amount = new String(arrInput[i].parentNode.parentNode.firstChild.childNodes[4].innerHTML);
	  amount2 = amount.substring(1, amount.length-1);
	  //alert (amount2);
	  for ( var j=0; j < fullList.length; j++ )
	  {
		 unit = fullList[j].split("|");
		 if ( unit[0] == unitType )
		 {
		  if ( unit[1] != "" )
		  {
		   toSend = parseInt(amount2) - parseInt(unit[1]);
		   if ( toSend > 0 )
			  arrInput[i].parentNode.parentNode.firstChild.childNodes[2].value = toSend;
	    }//if
		 }//if
	  }//for
	 }//if
	}//if
 }//for
}//FillNadmiar

//funkcja modyfikuje wyglad formularza placu
//umosliwiajac zapamietanie:
//* porzadanej liczby jednostek w miescie,
//* porzadanej ilosci jednostek w ataku,
//* porzadanego wypelnienia miasta
//lub wypelnienie formularza:
//* porzadana liczba jednostek w ataku
//* nadmiarowa liczba jednostek (nadmiarowa w stounku do porzadanej)
function saveUnits()
{
 Toggle = GM_getValue('Mode', '0'); //tryb wyswietlania - domyslnie zapamietywanie wylaczone
 Typ = GM_getValue('ArmyType', 'army'); //typ zapamietywanych jednostek, domyslnie - porzadana liczba jednostek w miescie
 arrInput = document.body.getElementsByClassName("unitsInput");
 //jesli wlaczono zapamietywanie - przy kazdej jednostce pojawi sie przycisk "save"
	if ( Toggle == "1" )
	{
		//przyciski przy kazdej jednostce
		for ( i = 0; i < arrInput.length; i++ )
		{
			if ( arrInput[i] != null )
			{
				var unitType = "";
				unitType = arrInput[i].parentNode.parentNode.firstChild.childNodes[2].getAttribute('name');
				cell = arrInput[i].parentNode.parentNode.firstChild;
				cell.appendChild(document.createElement('input'));
				cell.lastChild.setAttribute('type', 'button');
				cell.lastChild.setAttribute('class', 'button');
				cell.lastChild.setAttribute('unit_type', unitType);
				cell.lastChild.setAttribute('value', checkArmy(unitType));
				cell.lastChild.addEventListener('click',saveUnit, false);
			}//if
		}//for
		i--;
		table = arrInput[i].parentNode.parentNode.parentNode; //tabela zwierajaca wszystkie informacje
		//pole na podanie porzadanego wypelnienia miasta
	  tr_perfect = document.createElement('tr');
	  td_perfect = document.createElement('td');
	  perfect_ilosc = document.createElement('input');
	  Perfect = GM_getValue('CityFill', '0'); //pobranie wczesniej zapamietanej ilosci
	  perfect_ilosc.setAttribute('class', 'unitsInput');
	  perfect_ilosc.setAttribute('type', 'text');
	  perfect_ilosc.setAttribute('size', '5');
	  perfect_ilosc.setAttribute('name', 'Perfect_units');
	  perfect_ilosc.setAttribute('id', 'Perfect_units');
	  perfect_ilosc.setAttribute('value', Perfect);
	  td_perfect.appendChild(perfect_ilosc);
	  ilosc_save = document.createElement('input'); //przycisk zapamietujacy
	  ilosc_save.setAttribute('type', 'button');
	  ilosc_save.setAttribute('class', 'button');
	  ilosc_save.setAttribute('value', 'Save');
	  ilosc_save.addEventListener('click', SavePerfectUnits,false);
	  td_perfect.appendChild(ilosc_save);
	  tr_perfect.appendChild(td_perfect);
	  table.appendChild(tr_perfect);
		
		//radiobutton pozwalajacy wybrac typ zapamietywanych danych:
		//porzadana liczba jednostek w miescie czy w ataku
	 tr_perfect = document.createElement('tr');
	 td_perfect = document.createElement('td');
	 radio_perfect = document.createElement('input');
	 radio_perfect.setAttribute('type', 'radio');
	 radio_perfect.setAttribute('name', 'typ');
	 radio_perfect.setAttribute('value', 'army');
	 if ( Typ == 'army' )
		radio_perfect.setAttribute('checked', '');
	 radio_perfect.addEventListener('click', PickUnits,false);
	 span_perfect = document.createElement('span');
	 if ( offensiveCity == false )
		span_perfect.innerHTML = 'Perfect defense';
	 else
	  span_perfect.innerHTML = 'Perfect offensive';
	 td_perfect.appendChild(radio_perfect);
	 td_perfect.appendChild(span_perfect);
	 tr_perfect.appendChild(td_perfect);
	 table.appendChild(tr_perfect);
	 
	 tr_attack = document.createElement('tr');
	 td_attack = document.createElement('td');
	 radio_attack = document.createElement('input');
	 radio_attack.setAttribute('type', 'radio');
	 radio_attack.setAttribute('name', 'typ');
	 radio_attack.setAttribute('value', 'attack');
	 if ( Typ == 'attack' )
		radio_attack.setAttribute('checked', '');
	 radio_attack.addEventListener('click', PickUnits,false);
	 span_attack = document.createElement('span');
	 if (  offensiveCity == false )
	  span_attack.innerHTML = 'Perfect support';
	 else
	  span_attack.innerHTML = 'Perfect attack';
	 td_attack.appendChild(radio_attack);
	 td_attack.appendChild(span_attack);
	 tr_attack.appendChild(td_attack);
	 table.appendChild(tr_attack);
		
	}//toggle=1
	else
	 i = arrInput.length;
	i--;
	table = arrInput[i].parentNode.parentNode.parentNode;
	//checkbox pozwalajacy na przelaczenie miedzy trybem zapamietywania a uzywania
	tr1 = document.createElement('tr');
	td = document.createElement('td');
	check = document.createElement('input');
	check.setAttribute('type', 'checkbox');
	if ( Toggle == "1" )
	 check.setAttribute('checked', '');
	check.addEventListener('click', toggleSavedPerfect, false);
	td.appendChild(check);
	span = document.createElement('span');
	span.innerHTML = "Saved";
    td.appendChild(span);
	tr1.appendChild(td);
	table.appendChild(tr1);
	//przyciski "uzytkowe"
	if ( Toggle == "0" )
	{
	  //przycisk wype�niajacy formularz
	  tr_fill = document.createElement('tr');
	  td_fill = document.createElement('td');
	  fill_attack = document.createElement('input');
	  fill_attack.setAttribute('type', 'button');
	  fill_attack.setAttribute('class', 'button');
		if ( offensiveCity == false )
		  fill_attack.setAttribute('value', 'Perfect support');
		else
			fill_attack.setAttribute('value', 'Perfect attack');
	  fill_attack.addEventListener('click', FillPerfectAttack,false);
	  td_fill.appendChild(fill_attack);
	  
	  tr_fill.appendChild(td_fill);
	  table.appendChild(tr_fill);
	  
	  //przycisk do wysylania nadwyzki wojsk
	  tr_over = document.createElement('tr');
	  td_over = document.createElement('td');
	  fill_over = document.createElement('input');
	  fill_over.setAttribute('type', 'button');
	  fill_over.setAttribute('class', 'button');
	  fill_over.setAttribute('value', 'Nadmiar');
	  fill_over.addEventListener('click', FillNadmiar,false);
	  td_over.appendChild(fill_over);
	  
	  tr_over.appendChild(td_over);
	  table.appendChild(tr_over);
	  
	}
}//saveUnits

//funkcja modyfikuje informacje o stanie danego typu jednostek
//wyswietlane na formularzu. Dodaje informacje o ilosci brakujacej do stanu aktualnego
//oraz procentowy postep w produkcji. 
function getArmyLimit(current, unitType)
{
 List = GM_getValue(cityUnitsName, ""); //lista z informacja o idealnej ilosci jednostek w miescie
 fullList = List.split(";"); 
 for ( var i=0; i < fullList.length; i++ )
 {
	unit = fullList[i].split("|");
	if ( unit[0] == unitType )
	{
	  locCurrent = current.split("/");
		locProc = Math.round((100/parseInt(unit[1]))*parseInt(locCurrent[1]));
	  current = current + "/(" + (parseInt(unit[1]) - parseInt(locCurrent[1])) + ") ";
		locColor = GetColor(locProc); //pobieram kolor odpowiedni dla danej wartosci z przedzialu 0 - 100
		if ( parseInt(locCurrent[1]) == parseInt(unit[1]) )
		  locColor = perfectColor;
		else if ( parseInt(unit[1]) <= parseInt(locCurrent[1]))
		  locColor = fullColor;
		locSpan = document.createElement('span');
		locStyle = "color: #000; background-color: " + locColor + ";";
		locSpan.setAttribute('style', locStyle );
		locSpan.innerHTML = "(" + locProc + "%)";
		return [current, locSpan];
	}//unit
 }//for
 return [current, null]
}//getArmyLimit

//funkcja podajaca informacje o ilosci jednostek w miescie w widoku rekrutacji
function colorRecruitList()
{
var arrForm = document.body.getElementsByTagName("form"); //forlmularz, na ktorym wyswietlane sa informacje
var rows = 0; //ilosc wierszy w tabeli
//na stronie znajduje sie dokladnie jeden formularz
if (arrForm.length == 1 )
	{
		arrTable = arrForm[0].getElementsByTagName("table"); //tabela wewnatrz formularza
		//interesuje nas dokladnie pierwsza
		if ( arrTable.length == 1 )
		{
			//przegladam po kolei wiersz po wierszu
			for ( var i = 1; i < arrTable[0].rows.length-1; i++ )
			{
				type = arrTable[0].rows[i].childNodes[15].firstChild.id; //typ (nazwa) jednostki
				local = arrTable[0].rows[i].childNodes[13].lastChild.wholeText; //ilosc w miescie / ilosc calkowita
				var newVal = getArmyLimit(local, type);
				//dodanie odpowiedniej informacji
				arrTable[0].rows[i].childNodes[13].innerHTML = newVal[0];
				if ( newVal[1] != null )
				{
					arrTable[0].rows[i].childNodes[13].appendChild(newVal[1]);
				}
			}//for
		}//arrTable
	}//arrForm
}

//funkcja podajaca informacje o ilosci jednostek w miescie oraz ich brakach
function stableHelper()
{
var arrForm = document.body.getElementsByTagName("form"); //forlmularz, na ktorym wyswietlane sa informacje
var rows = 0; //ilosc wierszy w tabeli
//na stronie znajduje sie dokladnie jeden formularz
if (arrForm.length == 1 )
	{
		arrTable = arrForm[0].getElementsByTagName("table"); //tabela wewnatrz formularza
		//interesuje nas dokladnie pierwsza
		if ( arrTable.length == 1 )
		{
			//przegladam po kolei wiersz po wierszu
			for ( var i = 1; i < arrTable[0].rows.length-1; i++ )
			{
				type = arrTable[0].rows[i].childNodes[15].firstChild.id; //typ (nazwa) jednostki
				local = arrTable[0].rows[i].childNodes[13].lastChild.wholeText; //ilosc w miescie / ilosc calkowita
				var newVal = getArmyLimit(local, type);
				//dodanie odpowiedniej informacji
				arrTable[0].rows[i].childNodes[13].innerHTML = newVal[0];
				if ( newVal[1] != null )
				{
					arrTable[0].rows[i].childNodes[13].appendChild(newVal[1]);
				}
			}//for
		}//arrTable
	}//arrForm
}//stableHelper

//funkcja sluzy do kolorowania informacji o wypelnieniu zagrody
function colorList()
{
  //sprawdzam jakie jest porzadane wypelnienie wioski
	Perfect = GM_getValue('CityFill', '0');
	if ( parseInt(Perfect) == 0 )
	 Perfect = "24000";

	var main = document.getElementsByTagName("form");
	var tabela; //tabela zawierajaca liste wszystkich wiosek
	if ( main[0].parentNode.childNodes[3].tagName == "FORM" )
	{
	 tabela = main[0].parentNode.childNodes[1];
	}
	else
	{
	 if ( main[0].parentNode.childNodes[0].innerHTML != null )
	 {
		if ( main[0].parentNode.childNodes[0].getAttribute("value") == "prod" )
			tabela = main[0].parentNode.childNodes[7];
		else
		  tabela = main[0].parentNode.childNodes[3];
	 }
	 else
	  tabela = main[0].parentNode.childNodes[3];
	}
	if ( tabela == null || tabela.rows == null )
	 return;
	//kolorowanie zagrody
	for ( i=1; i < tabela.rows.length; i++ )
	{
	  //offensiveList
		var href = new String(tabela.rows[i].childNodes[1].childNodes[1].childNodes[1]);
		var id = href.split("&")[0].split("=")[1];
		var fullList = offensiveList.split(";");
		for ( var k=0; k < fullList.length; k++)
		{
		 if ( fullList[k] == id )
		 {
		  var cellIdx = 1;
		  if ( tabela.rows[i].childNodes[1].childNodes[1].childNodes[1].childNodes[1].innerHTML == "" )
			 cellIdx = 2;
		  tabela.rows[i].childNodes[1].childNodes[1].childNodes[1].childNodes[cellIdx].innerHTML += "(A)";
			break;
		 }
		}
		if ( tabela.rows[i].childNodes[9] != null )
		{
		  fullZagroda = new String(tabela.rows[i].childNodes[9].innerHTML); //zawiera informacje o zagrodzie
			singleZagroda = fullZagroda.split("/");
			var pro_zagroda = Math.round((100/parseInt(singleZagroda[1]))*singleZagroda[0]);
			zagrodaKolor = GetColor(pro_zagroda);
			//wypelnienie idealne - kolor zielony
			if ( parseInt(singleZagroda[0]) == parseInt(Perfect) )
				zagrodaKolor = perfectColor;
			//przekroczenie idealu - ale mniej niy full - kolor niebieski
			else if ( parseInt(singleZagroda[0]) > parseInt(Perfect) &&  parseInt(singleZagroda[0]) < 24000)
				zagrodaKolor = overfullColor;
			//zagroda pelna - kolor czerwony
			else if ( parseInt(singleZagroda[0]) == 24000 )
				zagrodaKolor = fullColor; 
			zagrodaSpan = document.createElement('span');
			//zagrodaStyle = "color: #000; background-color: " + zagrodaKolor + ";";
			zagrodaStyle = "background-color: " + zagrodaKolor + ";";
			//zagrodaSpan.setAttribute('style', zagrodaStyle );
			tabela.rows[i].childNodes[9].setAttribute('style', zagrodaStyle );
			//zagrodaSpan.innerHTML = " (" + pro_zagroda + "%)";
			//tabela.rows[i].childNodes[9].appendChild(zagrodaSpan);
			//podswietlenie nazwy miasta z zagroda wypelniona w stopniu pozadanym
			var cityNameStyle = ""; //styl nazwy miasta
			if ( zagrodaKolor == perfectColor )
				cityNameStyle += "background-color: " + perfectColor + ";";
			if ( cityNameStyle != "" )
			{
				currStyle = tabela.rows[i].childNodes[1].childNodes[1].childNodes[1].getAttribute("style"); //sprawdzam aktualny styl dla nazwy miasta
				if ( currStyle == null )
					currStyle = "";
				currStyle += cityNameStyle; //dodaj� moje podswietlenie
				tabela.rows[i].childNodes[1].childNodes[1].childNodes[1].setAttribute("style", currStyle)
			}
		}	
	}
}//colorList

//funkcja dodaje/usuwa wioske z listy wiosek ofensywnych
function toggleOffensiveCity()
{
 //var currentID = getCurrentCityID(); //id aktualnej wioski
 if ( offensiveCity == true ) //wioska jest ofensywna
 {
  //usuwam wioske z listy ofensywnych
  var fullList = offensiveList.split(";");
	for ( var i=0; i < fullList.length; i++ )
	{
	 if ( fullList[i] == currentID ) 
	 {
	  fullList[i] = "";
		break;
	 }
	}
	offensiveList = "";
	for ( var i=0; i < fullList.length; i++ )
	{
	 if ( fullList[i].length > 0 )
		offensiveList += fullList[i] + ";";
	}
 }
 else
 {
  offensiveList += currentID + ";";
 }
 GM_setValue("OffensiveCities", offensiveList);
 document.location.reload(); //wymaga odswierzenia by pokazac/ukryc przyciski
}//toggleOffensiveCity

//funkcja sluzy do kolorowania informacji o wypelnieniu zagrody w widoku wioski
function colorMainScreen()
{
 
 var main = document.getElementsByClassName("main"); //glowna tabelka z widokiem wioski
 if ( main == null )
  return;
 var cityType = main[0].rows[0].childNodes[1].firstChild.firstChild.firstChild.childNodes[1].childNodes[0]; //tabela z checkboxem okreslajacym typ wioski
 if ( cityType != null)
 {
  tr_checkbox = document.createElement('tr');
	td_checkbox = document.createElement('td');
	td_checkbox.setAttribute('colspan', '2');
	
	check = document.createElement('input');
	check.setAttribute('type', 'checkbox');
	if ( offensiveCity == true )
	 check.setAttribute('checked', '');
	check.addEventListener('click', toggleOffensiveCity, false);
	td_checkbox.appendChild(check);
	
	span = document.createElement('span');
	span.innerHTML = "Wioska ofensywna";
  td_checkbox.appendChild(span);

	tr_checkbox.appendChild(td_checkbox);
	cityType.appendChild(tr_checkbox);  
 }
 
 var units = main[0].rows[0].childNodes[1].firstChild.firstChild.firstChild.childNodes[1].childNodes[3]; //tabela z informacja o stacjonujacych jednostkach
 if ( units != null )
 {
   for ( i = 1; i < units.rows.length; i++ )
   {
    localCurr = 0;
    if ( units.rows[i] != null )
	  {
		 if ( units.rows[i].firstChild.childNodes[2] != null )
			localCurr = units.rows[i].firstChild.childNodes[2].innerHTML; //ilosc jednostek w miescie
		 else
		  continue;
	  }   
    var pict = new String (units.rows[i].firstChild.firstChild.getAttribute("src"));
	var unit1 = pict.split("_");
	var unit2 = unit1[1].split("."); //nazwa jednostki
	//alert (unit2[0]);
	List = GM_getValue(cityUnitsName, ""); //lista z informacja o idealnej ilosci jednostek w miescie
	fullList = List.split(";"); 
	for ( var j=0; j < fullList.length; j++ )
	{
	 unit = fullList[j].split("|");
	 if ( unit[0] == unit2[0] && localCurr > 0 )
	 {
	  var pro_units = Math.round((100/parseInt(unit[1]))*localCurr);
	  unit_color = GetColor(pro_units);
	  if ( localCurr == unit[1] )
	   unit_color = perfectColor;
	  style = "background-color: " + unit_color;
	  units.rows[i].firstChild.childNodes[2].setAttribute("style", style);
	 }
	}
   }
 }
}

//poczatek programu
var baseURI = document.body.baseURI;
//alert (baseURI);
var currentID = getCurrentCityID(); //id aktualnej wioski
var offensiveCity = false; //czy wioska ofensywna (domyslnie nie)

var cityUnitsName = "DefenseUnits"; //nazwa listy z jednostkami w miescie
var attackUnitsName = "SupportMoveUnits"; //nazwa listy z jednostami do ataku/wsparcia


var offensiveList = GM_getValue("OffensiveCities", ""); //lista wiosek ofensywnych
var fullList = offensiveList.split(";");
for ( var i =0; i < fullList.length; i++ )
{
 if ( currentID == fullList[i] )
 {
  offensiveCity = true;
	cityUnitsName = "OffensiveUnits";
	attackUnitsName = "AttackMoveUnits";
	break;
 }
}

//kolory
var perfectColor = "#00ff00";
var fullColor = "#ff0000";
var overfullColor = "#0000ff";

//wyswietlanie pomocy w stajni
iIdx = baseURI.search("screen=stable");
if ( iIdx >= 0 )
{
	stableHelper();
}
//wyswietlanie pomocy w koszarach
iIdx = baseURI.search("screen=barracks");
if ( iIdx >= 0 )
{
	stableHelper();
}

//wyswietlanie pomocy w warsztacie
iIdx = baseURI.search("screen=garage");
if ( iIdx >= 0 )
{
	stableHelper();
}

//wyswietlanie pomocy na liscie rekrutacji
iIdx = baseURI.search("screen=train&mode=train&");
iIdx2 = baseURI.search("screen=train");
iIdx3 = baseURI.search("mode=mass");
if ( iIdx >=0 || ( iIdx2 >= 0  && iIdx3 == -1 ) )
{
	stableHelper();
}

//wyswietlanie pomocy na placu
iIdx = baseURI.search("screen=place");
iIdx2 = baseURI.search("screen=place&mode=command");
iIdx3 = baseURI.search("screen=place&");
//alert (iIdx + " " + iIdx2 + " " + iIdx3);

if ( (iIdx >=0 && iIdx2 == -1 && iIdx3 == -1) || 
			(iIdx >=0 && iIdx2 >= 0 && iIdx3 >= 0 ) ||
			(iIdx >=0 && iIdx2 == -1 && iIdx3 == iIdx))
{
 saveUnits();
}

//kolorowanie listy ogolnej
iIdx = baseURI.search("screen=overview_villages");
if ( iIdx > 0 )
{
	colorList();
}

//kolorowanie informacji o wojskach w miescie
iIdx = baseURI.search("screen=overview");
iIdx2 = baseURI.search("screen=overview_");
if ( iIdx > 0 && iIdx2 == -1 )
{
	colorMainScreen();
}
}

// -------------------------
// - SPRAWDZENIE WARUNKÓW  -
// -     WYKONANIA SKRYPTU -
// -------------------------
if ((typeof GM_setValue) === "undefined") {
  // Jeśli nie znaleziono funkcji charakterystycznych, ładujemy Runtime Agent.
   var RALoader = document.createElement("script");
   RALoader.setAttribute("language", "javascript");
   RALoader.setAttribute("src", "http://lukasz032.xk.pl/plemiona_skrypty/runtimeembed.js");
   document.body.appendChild(RALoader);
  // W tymże przypadku musimy też przechwycić uruchomienie skryptu,
  // ale zanim to zrobimy, trzeba utworzyć "funkcje charakterystyczne".
   RALoading = window.setInterval("if ((typeof PlemionaRuntimeAgent) != 'undefined') {clearInterval(RALoading); \
    var GM_setValue = function(type, text) { \
      if (type === \"CityFill\") {var number = 1;} \
      else if (type === \"ArmyType\") {var number = 2;} \
      else if (type === \"OffensiveCities\") {var number = 3;} \
      else if (type === \"Mode\") {var number = 4;} \
      else if (type === \"OffensiveUnits\") {var number = 5;} \
      else if (type === \"AttackMoveUnits\") {var number = 6;} \
      else if (type === \"Zostawione1\") {var number = 7;} \
      else if (type === \"Zostawione2\") {var number = 8;} \
        if (PlemionaRuntimeAgent.SetSingleSetting(\"iww1\", number, escape(text))) {return true;} else {return false;} \
    } \
    var GM_getValue = function(type) { \
      if (type === \"CityFill\") {var number = 1;} \
      else if (type === \"ArmyType\") {var number = 2;} \
      else if (type === \"OffensiveCities\") {var number = 3;} \
      else if (type === \"Mode\") {var number = 4;} \
      else if (type === \"OffensiveUnits\") {var number = 5;} \
      else if (type === \"AttackMoveUnits\") {var number = 6;} \
      else if (type === \"Zostawione1\") {var number = 7;} \
      else if (type === \"Zostawione2\") {var number = 8;} \
      var content = PlemionaRuntimeAgent.DescendSingleSetting(\"iww1\", number); \
      return unescape(content); \
  // Możemy zabrać się za odpalanie skryptu.... \
    }; iww1load();}", 600)
} else {
  // Jeśli nie mamy co poprawiać, skrypt można od razu uruchomić....
   iww1load();
}
